#include<stdio.h>
#include<stdlib.h>
typedef struct SNode{
	char data;
	struct SNode *next;
}LiStack;
void InitStack(LiStack *&s);
void Push(LiStack *&s,char e);
bool Pop(LiStack *&s,char &e);
bool GetTop(LiStack *&s, char &e);
int main(){
	int flag=1,n=0,left=0,right=0; 
	char ch,c,e,l1,l2,r1,r2;
	LiStack *st,*sy;
	InitStack(st);InitStack(sy);
	ch=getchar();
	while(flag==1&&n<=100){
	if((c=getchar())=='.'){
		if(ch=='\n')
		flag=0;
	}
	if(ch=='/'){
		if(c=='*'){
			if(left==0){
			l1=ch;
			l2=c;				
			}
			n++;
			left++;
			Push(st,c);
			Push(st,ch); 
		} 
	}
		if(ch=='(' || ch=='{' || ch=='[' ){
		Push(st,ch);n++;
		if(left==0){
			l1=ch;				
			}
			left++;
	}
		else if(ch!='(' && ch!='{' && ch!='[' && ch!='/' ) {
			switch(ch){
				case ')' :
					r1=ch;
					n++; right++;
				if(GetTop(st,e)==true){
					if(e!='('){
						Push(sy,ch);
					}
					else
					Pop(st,e);
				}
				else
				Push(sy,ch);				
				break;
				case '}':
					r1=ch;
					n++; right++;
				if(GetTop(st,e)==true){
					if(e!='{'){
						Push(sy,ch);
					}
					else
					Pop(st,e);
				}
				else
				Push(sy,ch);
				break;
				case ']':
					r1=ch;
					n++; right++;
				if(GetTop(st,e)==true){
					if(e!='['){
						Push(sy,ch);
					}
					else
					Pop(st,e);
				}
				else
				Push(sy,ch);
				break;
				case '*':
				if(c=='/'){
					r1=ch;r2=c;
					n++; right++;
				if(GetTop(st,e)==true){
					if(e!='/'){
						Push(sy,c);
						Push(sy,ch);
					}
					else{
					Pop(st,e);
					Pop(st,e);											
					}
				}
				else{
					Push(sy,c);
					Push(sy,ch);					
				}
									
				}
				break;
				default:
				break;								
			}
		}
		ch=c;
	}
	if(GetTop(st,e)==true ||GetTop(sy,e)==true  ){
		printf("NO\n");
		if(e=='/'){
			Pop(st,e);
			c=e;
			Pop(st,e);
			printf("%c%c-?",c,e);
			flag=5;
		}
		else if(left==right && flag!=5){
			printf("%c-?",e);
		}
		else if(left>right && flag!=5){
	if(l1!='/')
	printf("%c-?",l1);
	else
	printf("%c%c-?",l1,l2);
}
else if(left<right && flag!=5){
	if(r1!='*')
	printf("?-%c",r1);
	else
	printf("?-%c%c",r1,r2);
}
	}
	else 
	printf("YES");
}
void InitStack(LiStack *&s){
	s=(LiStack *)malloc(sizeof(LiStack));
	s->next=NULL;
}
void Push(LiStack *&s,char e){
	LiStack *p;
	p=(LiStack *)malloc(sizeof(LiStack));
	p->data=e;
	p->next=s->next;
	s->next=p;
}
bool Pop(LiStack *&s,char &e){
	LiStack *p;
	if(s->next==NULL)
	return false;
	p=s->next;
	e=p->data;
	s->next=p->next;
	free(p);
	return true;
}
bool GetTop(LiStack *&s,char &e){
	if(s->next==NULL)
	return false;
	e=s->next->data;
	return true;
}
